﻿using DigDes.DSchool.SUPS.DataAccess.Interface;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DigDes.DSchool.SUPS.DataAccess.Database
{
    public class FileLoaderDAC
    {
        // TODO: вынести общий функционал для подобных классов доступа к БД в общий класс BaseDAC

        // Сама строка хранится в app.config (web.config) файле исполняемого файла, который дёрнет метод этой библиотеки классов.
        // В нашем случае это DigDes.DSchool.SUPS.Test.App файл App.Config.

        private static readonly string ConnectionStringKey = "SUPSDB";

		public static void Send(FileRow row)
        {
            var connectionString = ConfigurationManager.ConnectionStrings[ConnectionStringKey].ConnectionString;
            using (var sqlConn = new SqlConnection(connectionString))
            {
                using (var sqlCmd = sqlConn.CreateCommand())
                {
					sqlCmd.CommandText = "insert into carriages values (" +
						"@carriage_number, @goods_weight, @stantion_of_destination, @goods_cod, " +
						"@code_of_receiver, @carriage_type, @starting_station, @operation_number, " +
						"@date_of_operation, @years_of_operation, @operation_times, @station_oper, " +
						"@road_of_putting, @road_of_giving, @traveling_index, @train_index)";

					sqlCmd.Parameters.AddWithValue("@carriage_number", row.CarriageNumber);
					sqlCmd.Parameters.AddWithValue("@goods_weight", row.GoodsWeight);
					sqlCmd.Parameters.AddWithValue("@stantion_of_destination", row.StantionOfDestination);
					sqlCmd.Parameters.AddWithValue("@goods_cod", row.GoodsCod);
					sqlCmd.Parameters.AddWithValue("@code_of_receiver", row.CodeOfReceiver);
					sqlCmd.Parameters.AddWithValue("@carriage_type", row.CarriageType);
					sqlCmd.Parameters.AddWithValue("@starting_station", row.StartingStation);
					sqlCmd.Parameters.AddWithValue("@operation_number", row.OperationNumber);

					sqlCmd.Parameters.Add("@date_of_operation", System.Data.SqlDbType.VarChar, 4).Value = row.DateOfOperation;
					sqlCmd.Parameters.Add("@years_of_operation", System.Data.SqlDbType.VarChar, 2).Value = row.YearsOfOperation;
					sqlCmd.Parameters.Add("@operation_times", System.Data.SqlDbType.VarChar, 4).Value = row.OperationTimes;
					sqlCmd.Parameters.Add("@station_oper", System.Data.SqlDbType.VarChar, 5).Value = row.StationOper;
					sqlCmd.Parameters.Add("@road_of_putting", System.Data.SqlDbType.VarChar, 2).Value = row.RoadOfPutting;
					sqlCmd.Parameters.Add("@road_of_giving", System.Data.SqlDbType.VarChar, 2).Value = row.RoadOfGiving;
					sqlCmd.Parameters.Add("@traveling_index", System.Data.SqlDbType.VarChar, 13).Value = row.TravelingIndex;
					sqlCmd.Parameters.Add("@train_index", System.Data.SqlDbType.VarChar, 4).Value = row.TrainIndex;
					
					try
					{
						sqlConn.Open();
						sqlCmd.ExecuteNonQuery();
					}
					catch (Exception e) { Console.WriteLine(e.Message); }
                }
            }
        }

        public static void DoSomething2(IEnumerable<FileRow> rows)
        {
            // Делается по аналогии с предыдущим методом
            throw new NotImplementedException();
        }
    }
}
